Глава
6
Первая
страница с
использованием CFML
Вы можете
создавать CFML-страницы при помощи любого HTML-редактора или даже обычного Notepad
(Блокнота). Однако рекомендуем использовать ColdFusion Studio. ColdFusion Markup
Language (CFML) — это язык разметки, синтаксис которого подобен HTML. Поэтому
для Web-программистов CFML может являться интуитивно понятным средством разработки.
В отличие
от HTML, который определяет отображение и форматирование элементов на компьютере
клиента, CFML опознает определенные действия, выполняемые сервером ColdFusion.
Открытый и расширяемый язык CFML предоставляет более 75 серверных тегов, 247
функций и 1000 компонентов третьих фирм. Кроме того, ColdFusion легко дополняется
с помощью приложений на Java и C++.
Рассмотрим
пример создания страницы с использованием CFML. Итак:
Листинг
6.1. Текст нового файла
<HTML>
<HEAD>
<TITLE>Welcome</TITLE>
</HEAD> <BODY>
<STRONG>Welcome
! </STRONG>
< ! --- Установка
переменной FirstName --- >
<CFSET FirstName="Anjuta">
<! --- Вывод
на экран --- >
<CFOUTPUT>
Dear Ms. #FirstNamett, thank you for your interest in CFML.
</CFOUTPUT>
</BODY>
</HTML>
ColdFusion
поддерживает следующие расширения: cfm и cfnil. По умолчанию ColdFusion Studio
сохраняет новые файлы с расширением cfm.
Для сохранения
нашего примера выполните следующие действия:
Например,
если в корневом каталоге Web-сервера определен каталог ту-арр, тогда для:
Для просмотра
страницы необходимо открыть Web-браузер и в поле URL-адреса набрать http://127.0.0.1/my-app/welcome.cfm,
где 127. 0.0.1 - адрес локальной машины — localhost.
Сравните
по табл. 6.1 код, созданный первоначально, и код, возвращаемый Web-сервером.
Таблица
6. 1. Первоначальный и возвращенный Web-сервером коды
Первоисточник,
созданный в ColdFusion |
Просмотр
в виде HTML на компьютере клиента |
||
<HTML> <HEAD>
<TITLE>Welcome</TITLE> |
<HTML> <HEAD>
<TITLE>Welcome</TITLE> |
||
</HEAD> |
</HEAD> |
||
<BODY> |
<BODY> |
||
<STRONG>Welcome
! </STRONG> |
<STRONG>Welcome
! </STRONG> |
||
< ! --- Установка
переменной |
|
||
FirstName --- > |
|
||
<CFSET FirstName="Anjuta"> |
|
||
< ! --- Вывод
на экран -.--> |
|
||
<CFOUTPUT> |
|
||
Dear Ms. IFirstNamett,
thank you for your interest in CFML. |
Dear Ms. Anjuta,
thank you for your interest in CFML. |
||
</CFOUTPUT> |
|
||
</BODY> |
</BODY> |
||
</HTML> |
</HTML> |
||
Также просмотр
CFML-страниц можно осуществлять непосредственно из ColdFusion Studio, предварительно
произведя следующие установки:
Обратите внимание, что таким образом можно создавать сразу несколько логических псевдонимов (mappings) для ваших Web-разработок.
В дальнейшем для просмотра результата написанного нами кода остается воспользоваться панелью режима работы с документами и перейти из режима редактирования Edit (Редактор) в режим просмотра Browse (Просмотр).
В рассматриваемом
достаточно простом примере мы используем тег <CFSET> для определения переменной
FirstName. После чего внутри границ тега <CFOUTPUT> помещаем текст, включающий
значение данной переменной. Для вывода значения переменной заключаем ее между
символами #.
Таблица
6.2. Описание кода страницы welcome.cfm
Код |
Описание |
||
<! ---- Установка
переменной FirstName ---- > <CFSET FirstName="Anjuta"> <! ---- Вывод
на экран ---- > <CFOUTPUT> Dear Ms. #FirstName#,
thank you for your interest in CFML. </CFOUTPUT> |
CFML-комментарий,
который не отображается в HTML-странице Создаем переменную
с именем FirstName и задаем значение, равное "Anjuta" CFML-комментарий,
который не отображается в HTML-странице Выводим на экран
содержимое тега <CFOUTPUT>, в нашем случае текст "Dear
Ms." ("Уважаемая"), затем помещаем значение переменной
FirstName и далее фразу ", thank you for your interest in CFML.
" ("спасибо за оказанное внимание к CFML") |
||
Использование
переменных — достаточно удобное средство для создания гибких или, скажем, динамичных
страниц, когда содержимое HTML-документа может изменяться в зависимости от состояния
того или иного элемента.
Предположим,
нам необходимо изначально определить имя и пол пользователя и в зависимости
от этого поместить сообщение приветствия. Для этой цели мы будем сочетать форму
стандарта CGI и CFML.
Создадим
новую CFML-страницу с именем welcome_flex.cfm и напишем соответствующий код
(листинг 6.2).
Листинг
6.2. Код страницы welcome_flex.cfm
<HTML>
<HEAD>
<МЕТА name="Author" content="Ruben Akhayan">
<META http-equiv="Description" content="The advanced code">
<META http-equiv="Keywords" content="ColdFusion,CFML,Book">
<TITLE>Welcome</TITLE>
</HEAD>
<BODY>
<!--- Проверка
на наличие переменных --->
<CFIF isDefinedC'Form.FirstName") AND isDefinedf"Form.Gender")>
<STRONG>Welcome!</STRONG>
<!--- Установка
переменной Appeal --->
<CFIF #Form.Gender*
eq "f">
<CFSET Appeal="Ms.">
<CFELSE>
<CFSET Appeal="Mr.">
</CFIF>
<! -- - Вывод
на" экран--->
<CFOUTPUT>
Dear #Appeal#
#Form.FirstName#, thank you for your interest
in CFML. </CFOUTPUT>
<CFELSE>
<!---Скрипт,
для контроля ввода данных--->
<script>
function IsEmpty(data){
if(data.length==0)return
true;
else return
false;
}
function IsVerification(){
if(IsEmpty(document.forml.FirstName.value))
alert("Please,
enter your Name!"); return false; } }
</script>
< ! --- Форма
для ввода данных --- >
<FORM action='welcome_flex.cfra'
method='post' name=' forml'
onSubmit= ' return IsVerification ( ) ; ' >
<TABLE border='0' cellspacing='5' cellpadding=' 0 '>
<TR><TD
align="center" colspan="2">
Please, fill in the data on itself !</TD></TR>
<TR><TD colspan.;="2"> </TD></TR>
<TR><TD
align="right">First Name:</TD>
<TD><input name=' FirstName' size=' 17 '></TD></TR>
<TR><TD al ign= " right " >Gender : < /TD>
<TD><select
name=' Gender '>
<option value="m">male
<option value="f ">female </select> </TD></TR>
<TR><TD colspan="2"> </TD></TR>
<TR><TD
align="right">
<input type= ' submit ' value='Send'></td><td>
<input type=' reset' value= ' Clear '></td></tr> /TABLE>
</FORM>
</CFIF>
</BODY>
</HTML>
Теперь разберем,
что происходит на этой странице, уже не рассматривая CFML-комментарии и классические
HTML-теги (табл. 6.3).
Таблица
6.3. Описание кода страницы welcomejlex.cfm
Код |
Описание |
||
<CFIF isDefinedC'Form.FirstName")
AND isDefined ( "Form. Gender" )> |
Включаем тег
<CFIF> условного оператора для проверки наличия переменных FirstName
и Gender. Если переменные определены, тогда в HTML-страницу помещается
код, расположенный ниже вплоть до раздела <CFELSE> |
||
<CFIF # Form.
Gender! eq "f"> <CFSET Appeal="Ms. ">
<CFELSE> <CFSET Appeal="Mr . "> </CFIF> |
Создаем переменную
обращения к пользователю с именем Appeal и задаем значение в зависимости
от пола |
||
<CFOUTPUT> Dear tAppeall #Form.
FirstName#, thank you for your interest in CFML . </CFOUTPUT> |
Выводим на экран
сообщение приветствия, включая значения переменных Appeal И FirstName |
||
<CFELSE> |
Раздел тега
. условного оператора <CFIF>, "Иначе". Если не выполняется
условие оператора, тогда в HTML-страницу помещается код, расположенный
ниже и до раздела окончания тега оператора <CFIF> |
||
<script> function IsEmpty (data) { if (data. length==0) return true; else return false; } function IsVerification ( ) { if (IsEmpty (document. forml. FirstName. value) ) { alert ("Please,
enter your Name!"); return false; } } </script> |
Формируем сценарий
для контроля ввода данных в регистрационной форме. В нашем случае
предполагаем, что поле FirstName является обязательным, и нельзя допустить
пустого значения. При несоблюдении данного правила выводим сообщение
с текстом "Please, enter your Name!" (Пожалуйста, введите
Ваше имя!) |
||
Код |
Описание |
||
<FORM action=
'welcome flex.cfm" method= 'post ' name=' forml ' onSubmit= '
return IsVerif ication ( ) ; ' > <TABLE border='0'
cellspacing= ' 5 ' cellpadding= ' 0 '> <TR><TD
align="center" colspan="2"> Please, fill in
the data on itself !</TD></TR> <TR><TD
colspan="2"> </TDX/TR> <TRXTD align="right">
First- Name: </TD> <TD><input
name=' FirstName' size=' 17 '></TD></TR> <TR><TD
align="right"> Gender: </TD> <TDXselect name='
Gender '> <option value="m">male <option value="f
">female </select> </TD></TR> <TR><TD
colspan="2"> Snbsp; </TD></TR> <TR><TD
align="right"> <input type=
' submit ' value= ' Send ' ></tdxtd> <input type='
reset'value= ' Clear ' ></TD></TR> </TABLE>
</FORM> |
Предлагаем пользователю
ввести данные о себе — имя и пол, используя форму стандарта CGI. Надо
заметить, что при выполнении команды отправки сведений мы обращаемся
к этой же странице welcomejlex.cfm. Однако включенный в страницу условный
оператор, проверяющий наличие переменных FirstName и Gender, ИЗ-бавит
пользователя от повторной регистрации. В чем, собственно говоря, и
заключается изюминка (рис. 6.4) |
||
</CFIF> |
Конец тега <CFIF>
условного оператора |
||
Рассмотрим
код страницы welcome_flex.cfm в виде HTML при первом посещении (листинг 6.3)
и после регистрации (листинг 6.4).
Листинг
6.3. Код страницы welcome_flex.cfm при первом посещении
<HTML>
<HEAD>
<МЕТА name="Author"
content="Ruben Akhayan"> <META http-equiv="Description"
content="The advanced code"> <META http-equiv="Keywords"
content="ColdFusion,CEML,Book"> <TITLE>Welcome</TITLE>
</HEAD> <BODY> <script>
function IsEmpty(data){
if(data.length==0)return
true; else return false;
function IsVerificationO(
if(IsEmpty(document.forml.FirstName.value))
{ alert("Please, enter your Name!");
return false;
} }
</script>
<FORM action='welcome_flex.cfm'
method='post ' name=' forml'
onSubmit= ' return IsVerif ication ( ) ; ' >
<TABLE border='0' cellspacing=' 5' cellpadding=' 0 '>
<TR><TD
align="center" colspan="2">
Please, fill in the data on itself !</TD></TR>
<TR><TD colspan="2"> </td></tr>
<TR><TD align="right">First Name:</td>
<TD><input name=' FirstName' size=' 17 '></TD></TR>
<TR><TD align="right">Gender : </TD>
<TD><select
Ъате= ' Gender '>
<option value="m">male
<option value="f ">female </select> </TD></TR>
<TR><TD colspan="2"> </TD></TR>
<TR><TD
align="right">
<input type= 'submit' value='Send'></TD>
<TD> <input type=' reset' value=' Clear ' ></TD></TR>
</TABLE>
</FORM> </BODY> </HTML>
Листинг
6.4. Код страницы welcome_flex.cfm после регистрации
<HTML>
<HEAD>
<META name="Author"
content="Ruben Akhayan">
<META http-equiv="Description"
content="The advanced code">
<META http-equiv="Keywords"
content="ColdFusion, CFML, Book">
<TITLE>Welcome</TITLE>
</HEAD>
<BODY>
<STRONG>Welcome
! </STRONG>
Dear Mr. Robinson, thank you for your interest in CFML.
</BODY>
</HTML>
Поставленную
задачу можно также решить, используя две CFML-страницы. Для чего содержимое
страницы welcome_flex.cfm разобьем на два файла: welcome_form.cfm (листинг 6.5)
и welcoine_go.cfm (листинг 6.6), где файл welcome_form.cfm будет представлять
собой непосредственно форму ввода данных, а файл \velcome_go.cfm — приемник
данных с последующим выводом на экран сообщения приветствия.
Листинг
6.5. Код страницы welcome_form.cfm
<HTML>
<HEAD>
<МЕТА name="Author"
content="Ruben Akhayan">
<TITLE>Welcome</TITLE>
< ! --- Сценарий
для контроля ввода данных --- >
<script>
function IsEmpty
(data) {
if (data. length==0)
return true; else return false; }
function IsVerification
() {
if (IsEmpty (document . forml. Fir stName. value) }
{ alert ("Please,
enter your Name!"}; return false;
</script>
</HEAD> <BODY>
<! --- Форма
для ввода данных --- >
<FORM action='welcome_go.cfm'
method='post' name= ' forml '
onSubmit= ' return IsVerification () ; '>
<TABLE border='0' cellspacing=' 5' cellpadding=' 0' >
<TR><TD
align="center" colspan="2">
Please, fill
in the data on itself ! </TD></TR>
<TR><TD colspan="2"> </td></tr>
<TR><TD align="right">First Name:</td>
<TD><input name='FirstName' size='17'></TD></TR>
<TR><TD align="right">Gender:</TD>
<TD><select
name='Gender'>
<option value="m">male
<option value="f">female
</select> </TD></TR>
<TR><TD colspan="2"> </TD></TR>
<TR><TD
align="right">'
<input type='submit' value='Send'></td>
<td> <input type='reset' value=' Clear'></td></tr> </TABLE>
</FORM>
</BODY> </HTML>
Листинг
6.6. Код страницы welcome_go.cfm
<HTML>
<HEAD>
<META name="Author" content="Ruben Akhayan">
<TITLE>Welcome</TITLE>
</HEAD> <BODY>
<!--- Проверка
наличия переменных --->
<CFIF isDefined("Form.FirstName")
AND isDefined("Form.Gender")>
<STRONG>Welcome!</STRONG>
<!--- Установка
переменной Appeal --->
<CFIF #Form.Gendertt
eq "f">
<CFSET Appeal="Ms.">
<CFELSE>
<CFSET Appeal="Mr.">
</CFIF> <!---Вывод на экран--->
<CFOUTPUT>
Dear #Appeal#
#Form.FirstNamett, thank you for your interest in CFML.
<CFELSE>
<!--- Данные
не определены, отправляем на форму ввода данных --->
<МЕТА HTTP-EQUIV="Refresh" CONTENT="0;
URL=welcome_form.cfm"> </CFIF>
</BODY>
</HTML>
В качестве
примечания отметим, что страницу welcome_form.cfm можно смело преобразовать
в HTML-формат, предварительно убрав комментарии CF, например, в welcome_form.html.
Только в этом случае надо не забыть изменить ссылку на странице welcome_go.cfm,
с welcome_form.cfm на welcome_form.html. Дело в том, что в коде данной страницы
установлен переход на форму ввода данных при условии их отсутствия, что достаточно
удобно для избежания ошибок и соблюдения следующего условия — регистрационная
карта должна быть заполнена.
Подведем итог. В данной главе мы познакомились и использованием CFML-тегов <CFSET>, <CFOUTPUT>, <CFIF>/<CFELSE>, функцией isDefined и оператором eq.